/**
  ******************************************************************************
  * @file           : irkey.h
  * @brief          : Header for main.c file.
  *                   This file contains the common defines of the application.
  ******************************************************************************
  * @attention
  *
  ******************************************************************************
  */

/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __IRKEY_H
#define __IRKEY_H

#include <stdint.h>

#define IRKEY_WAVE_BUF_MAX               32
#define IRKEY_WAVE_EFFECTIVE_LEN         IRKEY_WAVE_EFFECCODE_LEN + 2 /* 正常情况下应该捕获26组数据,其中24组是编码,1组是同步 */
#define IRKEY_WAVE_EFFECCODE_LEN         24
#define IRKEY_WAVE_HEAD_DUTY             4000u
#define IRKEY_WAVE_HEAD_PERIOD           8000u
#define IRKEY_WAVE_BIT_DUTY              500u
#define IRKEY_WAVE_BIT_PERIOD0           2500u
#define IRKEY_WAVE_BIT_PERIOD1           1500u

#define IRKEY_WAVE_HEAD_DUTY_RANGE       500u
#define IRKEY_WAVE_HEAD_DUTY_RGMAX       (IRKEY_WAVE_HEAD_DUTY + IRKEY_WAVE_HEAD_DUTY_RANGE)
#define IRKEY_WAVE_HEAD_DUTY_RGMIN       (IRKEY_WAVE_HEAD_DUTY - IRKEY_WAVE_HEAD_DUTY_RANGE)

#define IRKEY_WAVE_HEAD_PERIOD_RANGE     IRKEY_WAVE_HEAD_DUTY_RANGE
#define IRKEY_WAVE_HEAD_PERIOD_RGMAX     (IRKEY_WAVE_HEAD_PERIOD + IRKEY_WAVE_HEAD_PERIOD_RANGE)
#define IRKEY_WAVE_HEAD_PERIOD_RGMIN     (IRKEY_WAVE_HEAD_PERIOD - IRKEY_WAVE_HEAD_PERIOD_RANGE)

#define IRKEY_WAVE_BIT_DUTY_RANGE        200u
#define IRKEY_WAVE_BIT_DUTY_RGMAX        (IRKEY_WAVE_BIT_DUTY + IRKEY_WAVE_BIT_DUTY_RANGE)
#define IRKEY_WAVE_BIT_DUTY_RGMIN        (IRKEY_WAVE_BIT_DUTY - IRKEY_WAVE_BIT_DUTY_RANGE)

#define IRKEY_WAVE_BIT_PERIOD0_RANGE     50
#define IRKEY_WAVE_BIT_PERIOD0_RGMAX     (IRKEY_WAVE_BIT_PERIOD0 + IRKEY_WAVE_BIT_PERIOD0_RANGE)
#define IRKEY_WAVE_BIT_PERIOD0_RGMIN     (IRKEY_WAVE_BIT_PERIOD0 - IRKEY_WAVE_BIT_PERIOD0_RANGE)

#define IRKEY_WAVE_BIT_PERIOD1_RANGE     50
#define IRKEY_WAVE_BIT_PERIOD1_RGMAX     (IRKEY_WAVE_BIT_PERIOD1 + IRKEY_WAVE_BIT_PERIOD1_RANGE)
#define IRKEY_WAVE_BIT_PERIOD1_RGMIN     (IRKEY_WAVE_BIT_PERIOD1 - IRKEY_WAVE_BIT_PERIOD1_RANGE)

#define IRKEY_CODE_MUTE      (0x0C0F3Fu)
#define IRKEY_CODE_POWER     (0x0D5F2Au)
#define IRKEY_CODE_T         (0x01CFE3u)
#define IRKEY_CODE_SET       (0x030FCFu)
#define IRKEY_CODE_HOME      (0x0F7F08u)
#define IRKEY_CODE_MENU      (0x062F9Du)
#define IRKEY_CODE_RETURN    (0x0F9F06u)
#define IRKEY_CODE_ENTER     (0x05CFA3u)
#define IRKEY_CODE_UP        (0x0A6F59u)
#define IRKEY_CODE_DOWN      (0x0A7F58u)
#define IRKEY_CODE_LEFT      (0x0A9F56u)
#define IRKEY_CODE_RIGHT     (0x0A8F57u)
#define IRKEY_CODE_OK        (0x00BFF4u)
#define IRKEY_CODE_VOLINC    (0x0D0F2Fu)
#define IRKEY_CODE_VOLDEC    (0x0D1F2Eu)
#define IRKEY_CODE_1         (0x0CEF31u)
#define IRKEY_CODE_2         (0x0CDF32u)
#define IRKEY_CODE_3         (0x0CCF33u)
#define IRKEY_CODE_4         (0x0CBF34u)
#define IRKEY_CODE_5         (0x0CAF35u)
#define IRKEY_CODE_6         (0x0C9F36u)
#define IRKEY_CODE_7         (0x0C8F37u)
#define IRKEY_CODE_8         (0x0C7F38u)
#define IRKEY_CODE_9         (0x0C6F39u)
#define IRKEY_CODE_0         (0x0CFF30u)

#define IRKEY_WAVE_QUE_LENGTH            10
#define IRKEY_WAVE_QUE_ITEMSIZE          sizeof(IrKey_WaveStru)

typedef enum _IrKey_KeyValueEnum
{
  IRKEY_KEY_VALUE_FAULT = 0,
  IRKEY_KEY_VALUE_NULL  = 1,
  IRKEY_KEY_VALUE_MUTE,
  IRKEY_KEY_VALUE_POWER,
  IRKEY_KEY_VALUE_T,
  IRKEY_KEY_VALUE_SET,
  IRKEY_KEY_VALUE_HOME,
  IRKEY_KEY_VALUE_MENU,
  IRKEY_KEY_VALUE_RETURN,
  IRKEY_KEY_VALUE_ENTER,
  IRKEY_KEY_VALUE_UP,
  IRKEY_KEY_VALUE_DOWN,
  IRKEY_KEY_VALUE_LEFT,
  IRKEY_KEY_VALUE_RIGHT,
  IRKEY_KEY_VALUE_OK,
  IRKEY_KEY_VALUE_VOLINC,
  IRKEY_KEY_VALUE_VOLDEC,
  IRKEY_KEY_VALUE_1,
  IRKEY_KEY_VALUE_2,
  IRKEY_KEY_VALUE_3,
  IRKEY_KEY_VALUE_4,
  IRKEY_KEY_VALUE_5,
  IRKEY_KEY_VALUE_6,
  IRKEY_KEY_VALUE_7,
  IRKEY_KEY_VALUE_8,
  IRKEY_KEY_VALUE_9,
  IRKEY_KEY_VALUE_0,
}IrKey_KeyValueEnum;

typedef struct
{
  uint32_t cnt;
  uint16_t ccr1[IRKEY_WAVE_BUF_MAX];
  uint16_t ccr2[IRKEY_WAVE_BUF_MAX];
}IrKey_WaveStru;

extern void irkey_init(void);

/* debug macro */
//#ifdef IRKEY_DEBUG_LEVEL
//#define  irkey_debug(...)    _printf(__VA_ARGS__);
//#else
//#define irkey_debug(...)   
//#endif 
                            
#endif /* __IRKEY_H */
